হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশন

Web Development - অ্যাঙ্গুলার (Angular) - সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন |
2
2

Angular এর হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশন (HDI) একটি শক্তিশালী ডিজাইন প্যাটার্ন যা সার্ভিস ইনজেকশন ব্যবস্থাকে অনেক স্তরে (hierarchical levels) সম্প্রসারণ করে। এটি Angular এর ডিপেন্ডেন্সি ইনজেকশন (DI) সিস্টেমের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অ্যাপ্লিকেশনের বিভিন্ন স্তরে (modules, components, services) ডিপেন্ডেন্সি ইনজেকশন নিয়ন্ত্রণ করতে সাহায্য করে। এর মাধ্যমে আপনি স্পেসিফিক স্তরে নির্দিষ্ট সার্ভিসের একটি নতুন ইন্সট্যান্স তৈরি করতে পারেন।


হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশন কী?

Angular-এর ডিপেন্ডেন্সি ইনজেকশন সিস্টেম একটি হায়ারার্কিক্যাল কাঠামোতে কাজ করে। এর মানে হলো, সার্ভিস ইনজেকশনের জন্য একটি হায়ারার্কি বা স্তর ভিত্তিক (level-based) মডেল রয়েছে যেখানে:

  1. রুট ইনজেকশন কন্টেইনার: অ্যাপ্লিকেশনের মূল স্তর, যেখানে সার্ভিসের একক ইন্সট্যান্স (singleton) ডিফাইন করা হয়।
  2. মডিউল ইনজেকশন কন্টেইনার: একটি নির্দিষ্ট মডিউল বা সাব-মডিউলে সার্ভিস সরবরাহ করা হয়।
  3. কম্পোনেন্ট ইনজেকশন কন্টেইনার: একটি নির্দিষ্ট কম্পোনেন্টে সার্ভিস ইনজেক্ট করা হয়, যেখানে সেই সার্ভিসের ইন্সট্যান্স সেই কম্পোনেন্টের জন্য পৃথক হতে পারে।

এই স্তরগুলির মধ্যে, কম্পোনেন্ট বা মডিউলে যেকোনো সার্ভিস ইনজেক্ট করা হলে, যদি সার্ভিসটি উচ্চতর স্তরে (অথবা রুট মডিউলে) ইনজেক্ট করা না থাকে, তবে এটি কম্পোনেন্ট বা মডিউলের নির্দিষ্ট স্তরে তার নিজস্ব ইন্সট্যান্স তৈরি করবে।


হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশনের সুবিধা

  1. অবজেক্টের স্কোপ নিয়ন্ত্রণ: আপনি একটি সার্ভিসের ইনস্ট্যান্সকে নির্দিষ্ট মডিউল বা কম্পোনেন্ট স্তরে স্কোপ করতে পারেন, যাতে সার্ভিসটি অন্যান্য স্তরের জন্য অ্যাক্সেসযোগ্য না হয়।
  2. ভিন্ন স্তরে সার্ভিসের বিভিন্ন ইনস্ট্যান্স: আপনি একই সার্ভিসকে বিভিন্ন স্তরে আলাদা আলাদা ইন্সট্যান্সে ব্যবহার করতে পারেন।
  3. পুনঃব্যবহারযোগ্য কোড: সার্ভিসের ইন্সট্যান্স প্যাটার্ন কন্ট্রোল করার মাধ্যমে কোড পুনঃব্যবহারযোগ্য হয় এবং এতে কোনো জটিলতা তৈরি হয় না।

হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশন এর কাজের প্রক্রিয়া

Angular একটি root injector এবং child injectors ব্যবহার করে:

  1. Root Injector: এটি অ্যাপ্লিকেশন লেভেলে ডিপেন্ডেন্সি ইনজেকশন পরিচালনা করে। যখন একটি সার্ভিস রুট কনটেইনারে ইনজেক্ট করা হয়, তখন এটি অ্যাপ্লিকেশনটির সব স্তরের জন্য একক ইন্সট্যান্স হিসাবে থাকে।
  2. Module Injector: যদি আপনি একটি সার্ভিস মডিউল স্তরে ইনজেক্ট করেন, তবে তা সেই মডিউলের কম্পোনেন্টগুলির মধ্যে শেয়ার করা হবে, তবে অন্য মডিউলের কম্পোনেন্টে এই সার্ভিসের নতুন ইন্সট্যান্স তৈরি হবে।
  3. Component Injector: আপনি যদি একটি সার্ভিস একটি কম্পোনেন্টে ইনজেক্ট করেন, তবে এটি শুধু ঐ কম্পোনেন্টের জন্য একটি পৃথক ইন্সট্যান্স তৈরি করবে।

এটি একটি ইনজেকশন হায়ারার্কি তৈরি করে, যেখানে সার্ভিসের ভিন্ন ভিন্ন স্তরের ইন্সট্যান্স তৈরি হয়, এবং এগুলি নির্দিষ্ট স্তরে লুকানো বা প্রদর্শিত হতে পারে।


উদাহরণ: হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশন

ধরা যাক, আপনার একটি LoggerService নামক সার্ভিস রয়েছে, যেটি অ্যাপের বিভিন্ন অংশে ব্যবহৃত হবে, এবং আপনি চাইছেন যে এই সার্ভিসের ইনস্ট্যান্সকে রুট, মডিউল, এবং কম্পোনেন্ট স্তরে কিভাবে কন্ট্রোল করবেন।

1. রুট স্তরে সার্ভিস ইনজেকশন

আপনি যদি সার্ভিসটিকে রুট স্তরে ইনজেক্ট করেন, তাহলে এটি অ্যাপ্লিকেশনের সব অংশে একক ইন্সট্যান্স হিসেবে ব্যবহৃত হবে।

@Injectable({
  providedIn: 'root' // রুট স্তরে ইনজেক্ট করা হচ্ছে
})
export class LoggerService {
  log(message: string) {
    console.log(message);
  }
}

2. মডিউল স্তরে সার্ভিস ইনজেকশন

যদি আপনি সার্ভিসটি একটি নির্দিষ্ট মডিউলে ইনজেক্ট করেন, তবে এটি শুধুমাত্র সেই মডিউলের কম্পোনেন্টগুলির জন্য ইনজেক্ট হবে।

@NgModule({
  providers: [LoggerService] // মডিউল স্তরে সার্ভিস ইনজেক্ট করা
})
export class AppModule { }

3. কম্পোনেন্ট স্তরে সার্ভিস ইনজেকশন

কম্পোনেন্ট স্তরে সার্ভিস ইনজেক্ট করলে, সার্ভিসটি শুধুমাত্র ঐ কম্পোনেন্টের জন্য পৃথক ইন্সট্যান্স তৈরি করবে।

@Component({
  selector: 'app-home',
  providers: [LoggerService] // কম্পোনেন্ট স্তরে সার্ভিস ইনজেক্ট করা
})
export class HomeComponent {
  constructor(private logger: LoggerService) {}
}

এখানে, LoggerService কেবলমাত্র HomeComponent এর মধ্যে ইনজেক্ট হবে এবং এটি অন্য কম্পোনেন্টে আলাদা ইন্সট্যান্স হবে।


সারাংশ

Angular এর হায়ারার্কিক্যাল ডিপেন্ডেন্সি ইনজেকশন আপনাকে সার্ভিসের ইন্সট্যান্সের জীবনচক্র এবং স্কোপ কন্ট্রোল করতে দেয়, যা কোডের রক্ষণাবেক্ষণ এবং পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে। এটি রুট, মডিউল এবং কম্পোনেন্ট স্তরে ইনজেকশন নিয়ন্ত্রণ করতে সহায়ক, এবং প্রয়োজনে একই সার্ভিসের ভিন্ন ভিন্ন ইন্সট্যান্স তৈরি করার সুবিধা দেয়।

Content added By
Promotion